"""
加密工具模块
提供简单加密解密功能（临时使用base64和hashlib）
"""

import base64
import hashlib

class CryptoManager:
    """加密管理器"""
    
    def __init__(self):
        """初始化加密管理器"""
        # 使用固定密钥（实际应用中应该从安全配置中获取）
        self.secret_key = "ITTS_SECRET_KEY_2023"
    
    def encrypt(self, data: str) -> str:
        """
        加密字符串（简单实现，生产环境需要更强的加密）
        
        Args:
            data: 要加密的字符串
            
        Returns:
            str: 加密后的Base64字符串
        """
        if not data:
            return ""
        
        try:
            # 简单的XOR加密 + Base64编码
            encoded_bytes = []
            for i, char in enumerate(data):
                key_char = self.secret_key[i % len(self.secret_key)]
                encoded_char = chr(ord(char) ^ ord(key_char))
                encoded_bytes.append(encoded_char)
            
            encoded_str = ''.join(encoded_bytes)
            return base64.b64encode(encoded_str.encode()).decode()
        except Exception as e:
            raise Exception(f"加密失败: {e}")
    
    def decrypt(self, encrypted_data: str) -> str:
        """
        解密字符串（简单实现，生产环境需要更强的加密）
        
        Args:
            encrypted_data: 加密的Base64字符串
            
        Returns:
            str: 解密后的原始字符串
        """
        if not encrypted_data:
            return ""
        
        try:
            # Base64解码 + XOR解密
            decoded_bytes = base64.b64decode(encrypted_data.encode()).decode()
            result_bytes = []
            
            for i, char in enumerate(decoded_bytes):
                key_char = self.secret_key[i % len(self.secret_key)]
                decoded_char = chr(ord(char) ^ ord(key_char))
                result_bytes.append(decoded_char)
            
            return ''.join(result_bytes)
        except Exception as e:
            raise Exception(f"解密失败: {e}")

# 全局加密管理器实例
_crypto_manager = None

def get_crypto_manager() -> CryptoManager:
    """获取加密管理器实例"""
    global _crypto_manager
    if _crypto_manager is None:
        _crypto_manager = CryptoManager()
    return _crypto_manager

def encrypt_password(password: str) -> str:
    """
    加密密码
    
    Args:
        password: 原始密码
        
    Returns:
        str: 加密后的密码
    """
    return get_crypto_manager().encrypt(password)

def decrypt_password(encrypted_password: str) -> str:
    """
    解密密码
    
    Args:
        encrypted_password: 加密的密码
        
    Returns:
        str: 解密后的原始密码
    """
    return get_crypto_manager().decrypt(encrypted_password)